#include "iostream.h"

#include "algorithm.h"
#include "iterator.h"
#include "list.h"


void print_string(char* s)
{
  cout << s << endl;
}

char* str[10] =
{
  "Zero",
  "One",
  "Two",
  "Three",
  "Four",
  "Five",
  "Six",
  "Seven",
  "Eight",
  "Nine"
};

int main()
{
  list<char*> l;

  copy(&str[0], &str[10], back_inserter(l, (char**)0));
  for_each(l.begin(), l.end(), print_string);
  cout << endl;

  list<char*> l2;

  copy(&str[0], &str[10], front_inserter(l2, (char**)0));
  for_each(l2.begin(), l2.end(), print_string);
  cout << endl;

  list_iterator<char*> i = l.begin();
  advance(i, 5);

  for_each(i, l.end(), print_string);
  cout << endl;

  ptrdiff_t d = 0;
  list_iterator<char*> j = l.begin();
  print_string(*i);
  print_string(*j);
  distance(j, i, d);
  cout << "Distance: " << d << endl;
  cout << endl;

  copy(&str[0], &str[10], inserter(l, i, (char**)0));
  for_each(l.begin(), l.end(), print_string);
  cout << endl;

  list<int> int_list;
  istream_iterator<int> icin(cin);
  back_insert_iterator<list<int>, int> ili(int_list);

  *ili = *icin;
  for(int k = 0; k < 9; ++k)
    *++ili = *++icin;

  ostream_iterator<int> osi(cout, ", ");
  copy(int_list.begin(), int_list.end(), osi);
  cout << endl;
}
